﻿/**
 * @file service_tool.hpp
 * @date 2021/04/25 14:11
 *
 * @author harrybao (harrybao@123u.com)
 *
 * @brief 服务使用计数
 *
 * @version v1.0.0
 *
 * @copyright Copyright © 2021 All Rights Reserved 上海欢乐互娱网络科技有限公司
 *
 * @par history:
 * <table>
 * <tr><th>Date                     <th>Version     <th>Author <th>Description
 * <tr><td>2021/04/25 14:11         <td>1.0.0       <td>harrybao
 * <td>创建初始版本 <tr><td>2021/05/13 17:35         <td>1.0.1 <td>harrybao
 * <td>重命名文件
 * </table>
 */

// #ifndef service_tool_HPP
// #define service_tool_HPP

#pragma once

#include <atomic>

namespace guild_service {
namespace common {

/**
 * @brief 服务使用计数类
 *
 */
class service_tool {
 public:
  service_tool() : user_count_(0) {}

  virtual ~service_tool() = default;

  /**
   * @brief
   *
   * @return true
   * @return false
   */
  virtual bool start() {
    user_count_.fetch_add(1);
    return true;
  }

  /**
   * @brief
   *
   * @return true
   * @return false
   */
  virtual bool stop() {
    user_count_.fetch_sub(1);
    return true;
  }

  /**
   * @brief
   *
   * @return true
   * @return false
   */
  bool started() const { return user_count_.load() > 0; }

  /**
   * @brief Get the user count object
   *
   * @return int
   */
  int get_user_count() const { return user_count_.load(); }

 private:
  std::atomic<int> user_count_;  ///< 使用者数量
};

}  // namespace common
}  // namespace guild_service

// #endif  // service_tool_H